package com.kz.bot.util;

import org.apache.commons.math3.util.FastMath;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

public class MathCalculationUtil {

    /**
     * 计算 BigDecimal a 的 BigDecimal b 次方
     */
    public static BigDecimal pow(BigDecimal a, BigDecimal b, int scale) {
        if (a.compareTo(BigDecimal.ZERO) <= 0) {
            throw new IllegalArgumentException("Base must be > 0 for non-integer exponents");
        }

        // 将 BigDecimal 转换成 double，使用 FastMath 提高精度
        double base = a.doubleValue();
        double exponent = b.doubleValue();

        // 使用 Apache FastMath.pow 计算
        double result = FastMath.pow(base, exponent);

        // 转回 BigDecimal，并保留 scale 位小数
        return new BigDecimal(result, new MathContext(scale, RoundingMode.HALF_UP));
    }

    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("1.2");   // 底数
        BigDecimal b = new BigDecimal("3.5");   // 指数
        BigDecimal result = pow(a, b, 10);      // 保留 10 位小数

        System.out.println(a + " ^ " + b + " = " + result);
    }
}
